package Demo03;

/*
* 静态代理 实现多线程模式
*
* 以 结婚 案例讲解
* */

/*
 * 静态代理 模式总结
 * 1.实现对象和代理对象都要实现同一个接口
 * 2.代理对象要代理真实的角色
 *
 * 好处：
 * 1.代理对象可以做很多真实对象做不了的事情
 * 2.真实对象可以专注做自己的事情
 * */


public class StacticProxy {

    public static void main(String[] args) {

        new Thread(()-> System.out.println("我爱你")).start();

        new WeddingCompany(new You()).HappyMarry();

        /*
        WeddingCompany weddingCompany = new WeddingCompany(new You());
        weddingCompany.HappyMarry();
        */
    }
}

// 结婚接口
interface Marry{
    //
    void HappyMarry();
}

// 结婚的人 真实 角色
class You implements Marry{
    @Override
    public void HappyMarry() {
        System.out.println("xxx 要结婚了。。。");
    }
}

// 婚庆公司 代理公司
class WeddingCompany implements Marry{

    private Marry target;

    public WeddingCompany(Marry target){
        this.target = target;
    }

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry();
        after();
    }

    private void after() {
        System.out.println("结婚之后，收取尾款");
    }

    private void before() {
        System.out.println("结婚之前，布置现场");
    }
}